/*
 * This file is Copyright 2002-2006 Loyola University Chicago,
 * Department of Computer Science and the Emerging Technologies Laboratory.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License via
 *    http://www.apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.citep.web.gwt.widgets;

import java.util.ArrayList;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.ListBox;
import com.citep.web.gwt.cache.*;
import com.citep.web.gwt.dto.*;

public class AccountSelectionWidget extends Composite implements AccountTreeListener {
	private AccountTreeCache cache;
	private ListBox selection = new ListBox();
	
	public AccountSelectionWidget() {
		this.cache = AccountTreeCache.getCache();
		init();
		this.initWidget(selection);
	}
	
	public void init() {
		selection.clear();
		cache.getAccountTree(this);
	}

	public AccountDTO getSelectedAccount() {
		if(selection.getSelectedIndex() < 1)
			return null;

		int id = Integer.parseInt(selection.getValue(selection.getSelectedIndex()));
		return cache.getAccount(id);
	}
	
	public void onAccountTreeCurrent() {
		//we don't need this
	}

	public void onAccountTreeLoadFailure(Throwable t) {
		selection.clear();
	}

	public void onAccountTreeReady(AccountTreeNode root) {
		selection.addItem("> Select an account","");
		
		ArrayList children = root.getChildren();
		if(children != null) {
			for(int i = 0; i < children.size(); i++) {
				processAccountNode((AccountTreeNode)(children.get(i)),0);
			}
		}
	}
	
	public void processAccountNode(AccountTreeNode node, int level) {
		String padding = "";
		for(int i = 0; i < level; i++) padding += "-";
		
		selection.addItem(padding + node.getAccount().getName(), ""+node.getAccount().getId());

		ArrayList children = node.getChildren();
		if(children != null) {
			for(int i = 0; i < children.size(); i++) {
				processAccountNode((AccountTreeNode)(children.get(i)),level+1);
			}
		}
	}
}
